//存在重复元素 II
/*给你一个整数数组 nums 和一个整数 k ，判断数组中是否存在两个 不同的索引 i 和 j ，满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在，返回 true ；否则，返回 f*/
class Solution {
public:
    bool containsNearbyDuplicate(vector<int>& nums, int k) {
        unordered_map<int, int> hash;
        for (int i = 0; i < nums.size(); i++) {
            if (hash.count(nums[i])) {
                if (abs(i - hash[nums[i]]) <= k)
                    return true;
            }
            hash[nums[i]] = i;
        }
        return false;
    }
};

//汇总区间
/*给定一个  无重复元素 的 有序 整数数组 nums 。

返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说，nums 的每个元素都恰好被某个区间范围所覆盖，并且不存在属于某个范围但不属于 nums 的数字 x 。

列表中的每个区间范围 [a,b] 应该按如下格式输出：

"a->b" ，如果 a != b
"a" ，如果 a == b*/
class Solution {
public:
    vector<string> summaryRanges(vector<int>& nums) {
        vector<string> ret;
        // sort(nums.begin(), nums.end());
        int left = 0, right = 0;
        // int index = 0;
        while (right < nums.size()) {
            if (right + 1 == nums.size() ||
                nums[right] + 1 != nums[right + 1]) {
                string temp;
                if (nums[left] != nums[right]) {
                    temp += to_string(nums[left]);
                    temp += "->";
                    temp += to_string(nums[right]);
                } else {
                    temp += to_string(nums[left]);
                }
                left = right + 1;
                ret.push_back(temp);
            }
            right++;
        }
        return ret;
    }
};